#ifndef SERVICIO_H
#define	SERVICIO_H

/**
 * Esta es una clase abstracta que funciona como base para otras clases que
 * modelan los distintos tipos de servicios que pesta servidor.
 */

#include <vector>
#include <Mutex.h>
#include "IMensajeEntranteManejador.h"

using namespace std;
using namespace TP::Threading;

namespace TP { namespace Servicios {

class Servicio : public IMensajeEntranteManejador  {
public:
    
    /**
     * Inicializa el servicio con datos válidos.
     */
    virtual void iniciar() = 0;
    
    virtual void finalizar() = 0;    
    
    virtual void mensajeEntranteManejador (IMensajero* pMensajero,
         const string& pMensaje) = 0;
    
    void hidratarMensaje (const string& pDescriptor,
        vector<string>& pMensaje) throw (Excepcion&);
    
    void notificar (IMensajero* pMensajero, const string& pMensaje);
    
    void notificarError (IMensajero* pMensajero, const string& pMensaje);
    
protected:
    Mutex _mutex;     
};
}}

#endif	/* SERVICIO_H */